home *** CD-ROM | disk | FTP | other *** search
/ Enter 2006 September / Enter 09 2006.iso / Internet / SpamExperts Home 1.1 / SpamExperts Home.exe / lib / spamexperts.modules / dns / rrset.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-07-14  |  5.5 KB  |  167 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''DNS RRsets (an RRset is a named rdataset)'''
  5. import dns.name as dns
  6. import dns.rdataset as dns
  7. import dns.rdataclass as dns
  8. import dns.renderer as dns
  9.  
  10. class RRset(dns.rdataset.Rdataset):
  11.     '''A DNS RRset (named rdataset).
  12.  
  13.     RRset inherits from Rdataset, and RRsets can be treated as
  14.     Rdatasets in most cases.  There are, however, a few notable
  15.     exceptions.  RRsets have different to_wire() and to_text() method
  16.     arguments, reflecting the fact that RRsets always have an owner
  17.     name.
  18.     '''
  19.     __slots__ = [
  20.         'name',
  21.         'deleting']
  22.     
  23.     def __init__(self, name, rdclass, rdtype, covers = dns.rdatatype.NONE, deleting = None):
  24.         '''Create a new RRset.'''
  25.         super(RRset, self).__init__(rdclass, rdtype)
  26.         self.name = name
  27.         self.deleting = deleting
  28.  
  29.     
  30.     def _clone(self):
  31.         obj = super(RRset, self)._clone()
  32.         obj.name = self.name
  33.         obj.deleting = self.deleting
  34.         return obj
  35.  
  36.     
  37.     def __repr__(self):
  38.         if self.covers == 0:
  39.             ctext = ''
  40.         else:
  41.             ctext = '(' + dns.rdatatype.to_text(self.covers) + ')'
  42.         if self.deleting is not None:
  43.             dtext = ' delete=' + dns.rdataclass.to_text(self.deleting)
  44.         else:
  45.             dtext = ''
  46.         return '<DNS ' + str(self.name) + ' ' + dns.rdataclass.to_text(self.rdclass) + ' ' + dns.rdatatype.to_text(self.rdtype) + ctext + dtext + ' RRset>'
  47.  
  48.     
  49.     def __str__(self):
  50.         return self.to_text()
  51.  
  52.     
  53.     def __eq__(self, other):
  54.         '''Two RRsets are equal if they have the same name and the same
  55.         rdataset
  56.         
  57.         @rtype: bool'''
  58.         if not isinstance(other, RRset):
  59.             return False
  60.         
  61.         if self.name != other.name:
  62.             return False
  63.         
  64.         return super(RRset, self).__eq__(other)
  65.  
  66.     
  67.     def match(self, name, rdclass, rdtype, covers, deleting = None):
  68.         '''Returns True if this rrset matches the specified class, type,
  69.         covers, and deletion state.'''
  70.         if not super(RRset, self).match(rdclass, rdtype, covers):
  71.             return False
  72.         
  73.         if self.name != name or self.deleting != deleting:
  74.             return False
  75.         
  76.         return True
  77.  
  78.     
  79.     def to_text(self, origin = None, relativize = True, **kw):
  80.         '''Convert the RRset into DNS master file format.
  81.  
  82.         @see: L{dns.name.Name.choose_relativity} for more information
  83.         on how I{origin} and I{relativize} determine the way names
  84.         are emitted.
  85.  
  86.         Any additional keyword arguments are passed on to the rdata
  87.         to_text() method.
  88.         
  89.         @param origin: The origin for relative names, or None.
  90.         @type origin: dns.name.Name object
  91.         @param relativize: True if names should names be relativized
  92.         @type relativize: bool'''
  93.         return super(RRset, self).to_text(self.name, origin, relativize, self.deleting, **kw)
  94.  
  95.     
  96.     def to_wire(self, file, compress = None, origin = None, **kw):
  97.         '''Convert the RRset to wire format.'''
  98.         return super(RRset, self).to_wire(self.name, file, compress, origin, self.deleting, **kw)
  99.  
  100.  
  101.  
  102. def from_text_list(name, ttl, rdclass, rdtype, text_rdatas):
  103.     '''Create an RRset with the specified name, TTL, class, and type, and with
  104.     the specified list of rdatas in text format.
  105.  
  106.     @rtype: dns.rrset.RRset object
  107.     '''
  108.     if isinstance(name, str):
  109.         name = dns.name.from_text(name, None)
  110.     
  111.     if isinstance(rdclass, str):
  112.         rdclass = dns.rdataclass.from_text(rdclass)
  113.     
  114.     if isinstance(rdtype, str):
  115.         rdtype = dns.rdatatype.from_text(rdtype)
  116.     
  117.     r = RRset(name, rdclass, rdtype)
  118.     r.update_ttl(ttl)
  119.     for t in text_rdatas:
  120.         rd = dns.rdata.from_text(r.rdclass, r.rdtype, t)
  121.         r.add(rd)
  122.     
  123.     return r
  124.  
  125.  
  126. def from_text(name, ttl, rdclass, rdtype, *text_rdatas):
  127.     '''Create an RRset with the specified name, TTL, class, and type and with
  128.     the specified rdatas in text format.
  129.  
  130.     @rtype: dns.rrset.RRset object
  131.     '''
  132.     return from_text_list(name, ttl, rdclass, rdtype, text_rdatas)
  133.  
  134.  
  135. def from_rdata_list(name, ttl, rdatas):
  136.     '''Create an RRset with the specified name and TTL, and with
  137.     the specified list of rdata objects.
  138.  
  139.     @rtype: dns.rrset.RRset object
  140.     '''
  141.     if isinstance(name, str):
  142.         name = dns.name.from_text(name, None)
  143.     
  144.     if len(rdatas) == 0:
  145.         raise ValueError, 'rdata list must not be empty'
  146.     
  147.     r = None
  148.     for rd in rdatas:
  149.         if r is None:
  150.             r = RRset(name, rd.rdclass, rd.rdtype)
  151.             r.update_ttl(ttl)
  152.             first_time = False
  153.         
  154.         r.add(rd)
  155.     
  156.     return r
  157.  
  158.  
  159. def from_rdata(name, ttl, *rdatas):
  160.     '''Create an RRset with the specified name and TTL, and with
  161.     the specified rdata objects.
  162.  
  163.     @rtype: dns.rrset.RRset object
  164.     '''
  165.     return from_rdata_list(name, ttl, rdatas)
  166.  
  167.